package Chat.System;

import Chat.Donnees.*;
import java.util.Vector;
import javax.swing.JProgressBar;

/**
 * Gestion de l'interface utilisateur
 * @author Ndanja & Papa Abdou
 */
public class ChatGUI {

    private ChatIHMDisconnect ihmdisconnected;
    private ChatIHMConnected ihmconnected;
    private ChatController mChatController;
    private ListContacts listeContacts;
    private String me;

    public ChatGUI() {
        me = new String();
        ihmdisconnected = new ChatIHMDisconnect(this);
        ihmconnected = new ChatIHMConnected(this);
        ihmconnected.setVisible(false);
        ihmdisconnected.setVisible(true);

    }

    /**
     *Permet de lancer la procédure de connexion<br/>
     *  -ouvrir la fenêtre connecté<br/>
     *  -NOtifier le Controller pour l'envoie d'un Hello<br/>
     * @param nickname
     */
    public void connect(String nickname) {

        ihmdisconnected.exit();
        ihmconnected.setVisible(true);
        mChatController.performConnect(nickname);

    }

    /**
     * Permet la deconnexion<br/>
     *  - ouvrir le fenêtre déconnecté<br/>
     *  - notifier le Controller pour envoyer un Bye
     */
    public void disconnect() {

        ihmconnected.exit();
        ihmdisconnected = new ChatIHMDisconnect(this);
        ihmdisconnected.setVisible(true);
        mChatController.performDisconnect();

    }

    /**
     * Mise à jour du chat en cas de reception d'un nouveau message
     * @param source : Nom de l'expéditeur
     * @param msg: Message
     */
    public void refreshMsg(String source, String msg) {
        ihmconnected.refreshMsg(source, msg);

    }

    /**
     * Permet d'envoyer un message <br/>
     * - envoie par le réseau pour un utilisateur distant
     * - afficher le message la bonne zonne de texte
     * @param dest : Le nom (nickname) du destinataire
     * @param msg: Le message à envoyer
     */
    public void sendMsg(String dest, String msg) {

        ihmconnected.refreshMsg("me", msg);
        Contact destination = listeContacts.getContact(dest);
        mChatController.perforSendMsg(msg, destination);
    }

    /**
     *Permet de notifier un utilisateur distant pour l'envoie d'un nouveau fichier
     * @param path: arborescence du fichier
     * @param fname: le nom du fichier
     * @param dest: le nom du destinataire
     * @param tailleMax: la taille du fichier
     */
    public void sendFile(String path, String fname, String dest, int tailleMax) {

        Contact destination = listeContacts.getContact(dest);
        mChatController.performSendFile(path, fname, destination);

    }

    /**
     * Insérer une barre de progression pendant le transfert de fichier
     * @param j : la barre de progression
     * @param src: Contact source
     * @param dest: Contact de destination
     * @param fName: Nom du fichier
     */
    public void addProgress(JProgressBar j, String src, String dest, String fName) {

        ihmconnected.addProgressBar(j, src, dest, fName);

    }

    /**
     *Permet de rajouter un nouveau contact dans la liste des utilisateurs.
     * @param nickname
     * 
     */
    public void addContact(String nickname) {

        ihmconnected.addContact(nickname);

    }

    /**
     *Permet de notifier l'utilisateur à la réception d'un nouveau fichier
     * @param m: nom du fichier
     * @return String: l'arborescence pour enregistrer le fichier
     */
    public String refreshFile(String m) {

        String pathFichier = null;
        pathFichier = ihmconnected.refreshFile();
        if (!pathFichier.equalsIgnoreCase("nulle")) {
            pathFichier = pathFichier + m;
        }

        return pathFichier;
    }

    /**
     *Permet de supprimer un contact dans la liste des utilisateurs.
     * @param n: le numéro du contact dans la liste
     */
    public void removeContact(Contact c) {
        /**
         * 
         *mChatController.removeContact((Contact)listecontacts.getContactByAddress((String)n)); 
         */
        ihmconnected.removeContact(c.getNickname());
    }

    /**
     * Permet de faire une liaison avec le Chat Controller
     * @param ctrl
     * 
     */
    public void setController(ChatController ctrl) {

        this.mChatController = ctrl;

    }

    /**
     *Permet d'avoir la référence du Chat Controller utilisé
     *  @return : ChatController
     */
    public ChatController getController() {

        return this.mChatController;
    }

    /**
     * Permet de faire une liaison avec la liste de contact
     */
    public void setListContacts() {

        listeContacts = mChatController.getListContacts();
    }

    /**
     *Retourne la liste des nicknames dans un Vecteur
     * @return: retourne Vector
     */
    public Vector getListNickName() {

        return this.listeContacts.getNicknameList();
    }

    /**
     * Permet d'avoir le nombre de Nickname dans la liste
     * @return: Int
     * 
     */
    public int getListNickNameNumberOfElements() {
        return this.listeContacts.getNicknameListNumberOfElements();
    }

    public void start() {
    }
}

